Javascript import defer
Deferring Module Evaluation
previously known as "Lazy Module Initialization"
code:typescript
import defer * as feature from "./some-feature.js";
// ここでは副作用が発生しない
console.log(feature.specialConstant); // 初アクセス時に初期化が実行される
import defer は依存モジュールをロードだけしておき、最初のプロパティアクセス時に初めて実行される
初期化処理を必要な時まで遅延できるので機動コスを節約できる
構文に対応しただけで実際の恩恵を受けるには import defer に対応したランタイムやバンドラーが必要 code:javascript
// Common JS
const operation = require('operation');
exports.doSomething = function (target) {
return operation(target);
}
// パフォーマンスの最適化のために以下に書き直される
exports.doSomething = function (target) {
const operation = require('operation');
return operation(target);
}
// ES Module だとこう
export async function doSomething(target) {
const { operation } = await import("operations");
return operation(target);
}
アプリ初期化時のネットワークや CPU のボトルネックは避けられるが以下の課題がある
実行延期の問題は解決しない
むしろ性能低下の恐れがあるため、事前読み込みステップが必要
全ての関数と呼び出し元を非同期モデルに移行する必要があり、後方互換性を損なう変更となる